﻿#include "APIHelperWindows.h"

#ifdef Q_OS_WIN
#include <Windows.h>
#include <Windowsx.h>

#endif

namespace BaseModule
{
    APIHelperWindows::APIHelperWindows()
    {
    }

    APIHelperWindows::~APIHelperWindows()
    {
    }


    void APIHelperWindows::moveWindow(QPoint point)
    {
        //注释掉此部分内容，避免和SAFramelessHelper的窗口大小和移动内容冲突
        // 获取当前前台窗口的句柄
        //HWND _windowHWND = GetForegroundWindow();
        //
        //if (_windowHWND != NULL)
        //{
        //    // 获取当前窗口的大小
        //    RECT _windowRect;
        //    if (GetWindowRect(_windowHWND, &_windowRect))
        //    {
        //        int _width = _windowRect.right - _windowRect.left;  // 当前宽度
        //        int _height = _windowRect.bottom - _windowRect.top; // 当前高度
        //
        //        // 移动窗口但保持大小不变
        //        SetWindowPos(_windowHWND,
        //            HWND_TOP,
        //            point.x(),      // 新的 x 坐标
        //            point.y(),      // 新的 y 坐标
        //            _width,          // 保持当前宽度
        //            _height,         // 保持当前高度
        //            SWP_NOACTIVATE | SWP_NOZORDER);
        //    }
        //}
    }

    QPoint APIHelperWindows::getGlobalWindowPos()
    {
        HWND _windowHWND = GetForegroundWindow();

        if (_windowHWND != NULL)
        {
            RECT _windowRect;
            if (GetWindowRect(_windowHWND, &_windowRect))
            {
                return QPoint(_windowRect.left, _windowRect.top);
            }
        }
        return QPoint(0, 0);  // 出错时返回一个默认值
    }

    QPoint APIHelperWindows::getGlobalMousePos()
    {
        POINT _point;
        if (GetCursorPos(&_point)) 
        {
            return QPoint(_point.x, _point.y);  // 将Win32 API的POINT转换为QPoint
        }
        return QPoint(0, 0);  // 出错时返回一个默认值
    }


    QPoint APIHelperWindows::getScreenSize()
    {
        HWND _windowHWND = GetForegroundWindow();
        //MONITOR_DEFAULTTONEAREST 返回值是最接近该点的屏幕句柄
        //MONITOR_DEFAULTTOPRIMARY 返回值是主屏幕的句柄
        //如果其中一个屏幕包含该点，则返回值是该屏幕的HMONITOR句柄。如果没有一个屏幕包含该点，则返回值取决于dwFlags的值
        HMONITOR hMonitor = MonitorFromWindow(_windowHWND, MONITOR_DEFAULTTONEAREST);
        MONITORINFOEX miex;
        miex.cbSize = sizeof(miex);
        if (!GetMonitorInfo(hMonitor, &miex)) return QPoint(0, 0);      // 出错时返回一个默认值
            
        DEVMODE dm;
        dm.dmSize = sizeof(dm);
        dm.dmDriverExtra = 0;

        //ENUM_CURRENT_SETTINGS 检索显示设备的当前设置
        //ENUM_REGISTRY_SETTINGS 检索当前存储在注册表中的显示设备的设置
        if (!EnumDisplaySettings(miex.szDevice, ENUM_CURRENT_SETTINGS, &dm)) return QPoint(0, 0);      // 出错时返回一个默认值

        return QPoint(dm.dmPelsWidth, dm.dmPelsHeight);
    }

}
